@@ -13,6 +13,7 @@ from TimeConvert import TimeConvert as tc  | 
            ||
| 13 | 13 | 
                from maintenance.models import ExpressCompanyInfo, MaintenaceInfo  | 
            
| 14 | 14 | 
                from utils.admin_utils import is_admin, is_maintenanceman  | 
            
| 15 | 15 | 
                from utils.error.errno_utils import MaintenanceStatusCode  | 
            
| 16 | 
                +from utils.kuaidi.subscribe import KuaiDi100 as KuaiDi100Subscribe  | 
            |
| 16 | 17 | 
                from utils.kuaidi.synquery import KuaiDi100  | 
            
| 17 | 18 | 
                 | 
            
| 18 | 19 | 
                 | 
            
                @@ -55,6 +56,8 @@ def maintenance_add(request):  | 
            ||
| 55 | 56 | 
                         maintenance_status_at={maintenance_status: tc.utc_datetime()}
               | 
            
| 56 | 57 | 
                )  | 
            
| 57 | 58 | 
                 | 
            
| 59 | 
                + maintenance_tracking_info_subscribe(maintenance, 'tracking')  | 
            |
| 60 | 
                +  | 
            |
| 58 | 61 | 
                     return response(data={
               | 
            
| 59 | 62 | 
                'maintenance_id': maintenance.id,  | 
            
| 60 | 63 | 
                })  | 
            
                @@ -107,6 +110,9 @@ def maintenance_update(request):  | 
            ||
| 107 | 110 | 
                if user_id != maintenance.user_id and not is_admin(brand_id, admin_id):  | 
            
| 108 | 111 | 
                return response(MaintenanceStatusCode.MAINTENACE_PERMISSION_DENIED)  | 
            
| 109 | 112 | 
                 | 
            
| 113 | 
                + old_tracking_number = maintenance.tracking_number  | 
            |
| 114 | 
                + old_back_tracking_number = maintenance.back_tracking_number  | 
            |
| 115 | 
                +  | 
            |
| 110 | 116 | 
                if name:  | 
            
| 111 | 117 | 
                maintenance.name = name  | 
            
| 112 | 118 | 
                if phone:  | 
            
                @@ -146,6 +152,11 @@ def maintenance_update(request):  | 
            ||
| 146 | 152 | 
                maintenance.maintenance_status_at = maintenance_status_at  | 
            
| 147 | 153 | 
                maintenance.save()  | 
            
| 148 | 154 | 
                 | 
            
| 155 | 
                + if tracking_number and tracking_number != old_tracking_number:  | 
            |
| 156 | 
                + maintenance_tracking_info_subscribe(maintenance, 'tracking')  | 
            |
| 157 | 
                + if back_tracking_number and back_tracking_number != old_back_tracking_number:  | 
            |
| 158 | 
                + maintenance_tracking_info_subscribe(maintenance, 'back_tracking')  | 
            |
| 159 | 
                +  | 
            |
| 149 | 160 | 
                return response()  | 
            
| 150 | 161 | 
                 | 
            
| 151 | 162 | 
                 | 
            
                @@ -232,3 +243,25 @@ def maintenance_tracking_info(request):  | 
            ||
| 232 | 243 | 
                'type': type_,  | 
            
| 233 | 244 | 
                'tracking_info': tracking_info,  | 
            
| 234 | 245 | 
                })  | 
            
| 246 | 
                +  | 
            |
| 247 | 
                +  | 
            |
| 248 | 
                +def maintenance_tracking_info_subscribe(maintenance, type_):  | 
            |
| 249 | 
                +    callbackurl = '{}/maintenance/tracking/info/callback?maintenance_id={}&type={}'.format(settings.DOMAIN, maintenance.pk, type_)
               | 
            |
| 250 | 
                + if type_ == 'tracking':  | 
            |
| 251 | 
                + express_com = maintenance.express_com  | 
            |
| 252 | 
                + tracking_number = maintenance.tracking_number  | 
            |
| 253 | 
                + phone = maintenance.phone  | 
            |
| 254 | 
                + else:  | 
            |
| 255 | 
                + express_com = maintenance.back_express_com  | 
            |
| 256 | 
                + tracking_number = maintenance.back_tracking_number  | 
            |
| 257 | 
                + phone = maintenance.phone  | 
            |
| 258 | 
                + res = KuaiDi100Subscribe().submit(express_com, tracking_number, phone=phone, callbackurl=callbackurl)  | 
            |
| 259 | 
                + print(res)  | 
            |
| 260 | 
                +  | 
            |
| 261 | 
                +  | 
            |
| 262 | 
                +@logit  | 
            |
| 263 | 
                +def maintenance_tracking_info_callback(request):  | 
            |
| 264 | 
                +    maintenance_id = request.GET.get('maintenance_id', '')
               | 
            |
| 265 | 
                +    type_ = request.GET.get('type', 'tracking')  # tracking / back_tracking
               | 
            |
| 266 | 
                +  | 
            |
| 267 | 
                + return response()  | 
            
                @@ -279,4 +279,5 @@ urlpatterns += [  | 
            ||
| 279 | 279 | 
                url(r'^admin/maintenance/list$', maintenance_views.maintenance_list, name='maintenance_list'),  | 
            
| 280 | 280 | 
                 | 
            
| 281 | 281 | 
                url(r'^maintenance/tracking/info$', maintenance_views.maintenance_tracking_info, name='maintenance_tracking_info'),  | 
            
| 282 | 
                + url(r'^maintenance/tracking/info/callback$', maintenance_views.maintenance_tracking_info_callback, name='maintenance_tracking_info_callback'),  | 
            |
| 282 | 283 | 
                ]  | 
            
                @@ -3,14 +3,15 @@  | 
            ||
| 3 | 3 | 
                import json  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 5 | 
                import requests  | 
            
| 6 | 
                +from django.conf import settings  | 
            |
| 6 | 7 | 
                 | 
            
| 7 | 8 | 
                 | 
            
| 8 | 9 | 
                class KuaiDi100:  | 
            
| 9 | 10 | 
                def __init__(self):  | 
            
| 10 | 
                - self.key = '' # TODO 客户授权key  | 
            |
| 11 | 
                +        self.key = settings.KUAIDI00.get('key', '')  # TODO 客户授权key
               | 
            |
| 11 | 12 | 
                self.url = 'https://poll.kuaidi100.com/poll' # 请求地址  | 
            
| 12 | 13 | 
                 | 
            
| 13 | 
                - def submit(self, com, num, phone, ship_from, ship_to):  | 
            |
| 14 | 
                + def submit(self, com, num, phone=None, ship_from=None, ship_to=None, callbackurl=None):  | 
            |
| 14 | 15 | 
                """  | 
            
| 15 | 16 | 
                物流轨迹订阅  | 
            
| 16 | 17 | 
                :param com: 快递公司编码  | 
            
                @@ -27,7 +28,8 @@ class KuaiDi100:  | 
            ||
| 27 | 28 | 
                'to': ship_to,  | 
            
| 28 | 29 | 
                'key': self.key,  | 
            
| 29 | 30 | 
                             'parameters': {
               | 
            
| 30 | 
                - 'callbackurl': 'https://www.baidu.com/kd100/callback', # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123  | 
            |
| 31 | 
                + 'callbackurl': callbackurl,  | 
            |
| 32 | 
                + # 'callbackurl': 'https://www.baidu.com/kd100/callback', # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123  | 
            |
| 31 | 33 | 
                'salt': None, # 签名用随机字符串。32位自定义字符串。添加该参数,则推送的时候会增加sign给贵司校验消息的可靠性  | 
            
| 32 | 34 | 
                'resultv2': '1', # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能  | 
            
| 33 | 35 | 
                'autoCom': '0', # 添加此字段且将此值设为1,则表示开始智能判断单号所属公司的功能,开启后,company字段可为空,即只传运单号(number字段),我方收到后会根据单号判断出其所属的快递公司(即company字段)。建议只有在无法知道单号对应的快递公司(即company的值)的情况下才开启此功能  | 
            
                @@ -48,5 +50,5 @@ class KuaiDi100:  | 
            ||
| 48 | 50 | 
                return requests.post(self.url, req_params).text # 发送请求  | 
            
| 49 | 51 | 
                 | 
            
| 50 | 52 | 
                 | 
            
| 51 | 
                -result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
               | 
            |
| 52 | 
                -print(result)  | 
            |
| 53 | 
                +# result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
               | 
            |
| 54 | 
                +# print(result)  |